from typing import Dict, List


def render(table_shape, data: Dict):
    if not hasattr(table_shape, "has_table") or not table_shape.has_table:
        return False
    table = table_shape.table
    columns = data.get("columns") or []
    rows = data.get("rows") or []
    if columns:
        for i, name in enumerate(columns):
            if i < len(table.columns):
                table.cell(0, i).text = str(name)
    max_rows = len(table.rows) - 1
    for r_idx, row in enumerate(rows[:max_rows]):
        for c_idx, value in enumerate(row):
            if c_idx < len(table.columns):
                table.cell(r_idx + 1, c_idx).text = str(value)
    return True